home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / catman / p_man / cat3 / complib / dggqrf.z / dggqrf
Text File  |  1996-03-14  |  6KB  |  199 lines

  1.  
  2.  
  3.  
  4. DDDDGGGGGGGGQQQQRRRRFFFF((((3333FFFF))))                                                          DDDDGGGGGGGGQQQQRRRRFFFF((((3333FFFF))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      DGGQRF - compute a generalized QR factorization of an N-by-M matrix A and
  10.      an N-by-P matrix B
  11.  
  12. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  13.      SUBROUTINE DGGQRF( N, M, P, A, LDA, TAUA, B, LDB, TAUB, WORK, LWORK, INFO
  14.                         )
  15.  
  16.          INTEGER        INFO, LDA, LDB, LWORK, M, N, P
  17.  
  18.          DOUBLE         PRECISION A( LDA, * ), B( LDB, * ), TAUA( * ), TAUB( *
  19.                         ), WORK( * )
  20.  
  21. PPPPUUUURRRRPPPPOOOOSSSSEEEE
  22.      DGGQRF computes a generalized QR factorization of an N-by-M matrix A and
  23.      an N-by-P matrix B:
  24.  
  25.                  A = Q*R,        B = Q*T*Z,
  26.  
  27.      where Q is an N-by-N orthogonal matrix, Z is a P-by-P orthogonal matrix,
  28.      and R and T assume one of the forms:
  29.  
  30.      if N >= M,  R = ( R11 ) M  ,   or if N < M,  R = ( R11  R12 ) N,
  31.                      (  0  ) N-M                         N   M-N
  32.                         M
  33.  
  34.      where R11 is upper triangular, and
  35.  
  36.      if N <= P,  T = ( 0  T12 ) N,   or if N > P,  T = ( T11 ) N-P,
  37.                       P-N  N                           ( T21 ) P
  38.                                                           P
  39.  
  40.      where T12 or T21 is upper triangular.
  41.  
  42.      In particular, if B is square and nonsingular, the GQR factorization of A
  43.      and B implicitly gives the QR factorization of inv(B)*A:
  44.  
  45.                   inv(B)*A = Z'*(inv(T)*R)
  46.  
  47.      where inv(B) denotes the inverse of the matrix B, and Z' denotes the
  48.      transpose of the matrix Z.
  49.  
  50.  
  51. AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
  52.      N       (input) INTEGER
  53.              The number of rows of the matrices A and B. N >= 0.
  54.  
  55.      M       (input) INTEGER
  56.              The number of columns of the matrix A.  M >= 0.
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. DDDDGGGGGGGGQQQQRRRRFFFF((((3333FFFF))))                                                          DDDDGGGGGGGGQQQQRRRRFFFF((((3333FFFF))))
  71.  
  72.  
  73.  
  74.      P       (input) INTEGER
  75.              The number of columns of the matrix B.  P >= 0.
  76.  
  77.      A       (input/output) DOUBLE PRECISION array, dimension (LDA,M)
  78.              On entry, the N-by-M matrix A.  On exit, the elements on and
  79.              above the diagonal of the array contain the min(N,M)-by-M upper
  80.              trapezoidal matrix R (R is upper triangular if N >= M); the
  81.              elements below the diagonal, with the array TAUA, represent the
  82.              orthogonal matrix Q as a product of min(N,M) elementary
  83.              reflectors (see Further Details).
  84.  
  85.      LDA     (input) INTEGER
  86.              The leading dimension of the array A. LDA >= max(1,N).
  87.  
  88.      TAUA    (output) DOUBLE PRECISION array, dimension (min(N,M))
  89.              The scalar factors of the elementary reflectors which represent
  90.              the orthogonal matrix Q (see Further Details).  B
  91.              (input/output) DOUBLE PRECISION array, dimension (LDB,P) On
  92.              entry, the N-by-P matrix B.  On exit, if N <= P, the upper
  93.              triangle of the subarray B(1:N,P-N+1:P) contains the N-by-N upper
  94.              triangular matrix T; if N > P, the elements on and above the (N-
  95.              P)-th subdiagonal contain the N-by-P upper trapezoidal matrix T;
  96.              the remaining elements, with the array TAUB, represent the
  97.              orthogonal matrix Z as a product of elementary reflectors (see
  98.              Further Details).
  99.  
  100.      LDB     (input) INTEGER
  101.              The leading dimension of the array B. LDB >= max(1,N).
  102.  
  103.      TAUB    (output) DOUBLE PRECISION array, dimension (min(N,P))
  104.              The scalar factors of the elementary reflectors which represent
  105.              the orthogonal matrix Z (see Further Details).  WORK
  106.              (workspace/output) DOUBLE PRECISION array, dimension (LWORK) On
  107.              exit, if INFO = 0, WORK(1) returns the optimal LWORK.
  108.  
  109.      LWORK   (input) INTEGER
  110.              The dimension of the array WORK. LWORK >= max(1,N,M,P).  For
  111.              optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3), where
  112.              NB1 is the optimal blocksize for the QR factorization of an N-
  113.              by-M matrix, NB2 is the optimal blocksize for the RQ
  114.              factorization of an N-by-P matrix, and NB3 is the optimal
  115.              blocksize for a call of DORMQR.
  116.  
  117.      INFO    (output) INTEGER
  118.              = 0:  successful exit
  119.              < 0:  if INFO = -i, the i-th argument had an illegal value.
  120.  
  121. FFFFUUUURRRRTTTTHHHHEEEERRRR DDDDEEEETTTTAAAAIIIILLLLSSSS
  122.      The matrix Q is represented as a product of elementary reflectors
  123.  
  124.         Q = H(1) H(2) . . . H(k), where k = min(n,m).
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. DDDDGGGGGGGGQQQQRRRRFFFF((((3333FFFF))))                                                          DDDDGGGGGGGGQQQQRRRRFFFF((((3333FFFF))))
  137.  
  138.  
  139.  
  140.      Each H(i) has the form
  141.  
  142.         H(i) = I - taua * v * v'
  143.  
  144.      where taua is a real scalar, and v is a real vector with
  145.      v(1:i-1) = 0 and v(i) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), and
  146.      taua in TAUA(i).
  147.      To form Q explicitly, use LAPACK subroutine DORGQR.
  148.      To use Q to update another matrix, use LAPACK subroutine DORMQR.
  149.  
  150.      The matrix Z is represented as a product of elementary reflectors
  151.  
  152.         Z = H(1) H(2) . . . H(k), where k = min(n,p).
  153.  
  154.      Each H(i) has the form
  155.  
  156.         H(i) = I - taub * v * v'
  157.  
  158.      where taub is a real scalar, and v is a real vector with
  159.      v(p-k+i+1:p) = 0 and v(p-k+i) = 1; v(1:p-k+i-1) is stored on exit in
  160.      B(n-k+i,1:p-k+i-1), and taub in TAUB(i).
  161.      To form Z explicitly, use LAPACK subroutine DORGRQ.
  162.      To use Z to update another matrix, use LAPACK subroutine DORMRQ.
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.